import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import Adagrad
import numpy as np

# 定义输入特征和目标变量
features = np.random.rand(128, 20).astype(np.float32)  # 假设有128个样本，每个样本20个特征
labels = np.random.randint(2, size=(128, 1)).astype(np.float32)  # 假设是二分类问题，生成0或1的标签

# 构建DNN模型
model = Sequential([
    Dense(10, activation='relu', input_shape=(20,)),  # 第一层隐藏层，10个单元，使用ReLU激活函数
    Dense(10, activation='relu'),  # 第二层隐藏层，10个单元，使用ReLU激活函数
    Dense(1, activation='sigmoid')  # 输出层，1个单元，使用Sigmoid激活函数（对于二分类问题）
])

# 编译模型
model.compile(optimizer=Adagrad(),  # 使用Adagrad优化器
              loss='binary_crossentropy',  # 二分类问题的损失函数
              metrics=['accuracy'])  # 评估指标包括准确率

# 训练模型
model.fit(features, labels, epochs=10, shuffle=True)

# 评估模型
loss, accuracy = model.evaluate(features, labels, verbose=0)
print(f'Loss: {loss}, Accuracy: {accuracy}')

# 预测
predictions = model.predict(features)
# 注意：predictions 现在是概率值，如果需要类别标签，可以使用阈值（如0.5）来转换
predicted_classes = (predictions > 0.5).astype(np.int32)
print(predicted_classes)